package PrefixSum$DoublePointer;

/**
 * 盛最多水的容器
 * https://leetcode-cn.com/problems/container-with-most-water/
 * 给定一个序列，以下标间距为长，值为宽，求能够盛最多水的容器，及最大的面积
 * 解题思路：两个下标间距固定，则值较小的那个就是宽，两个下标，一个从左往右，一个从右往左，
 *         在往中间移动的过程中，下标间距是逐渐缩短的，那么值就要留下比较大的那个，才能让面积尽可能的大，
 *         因此，每次计算完最大面积之后，移动值较小的那个下标
 * 注意事项：每次操作仅移动一个下标
 * 测试用例：1、{1,8,6,2,5,4,8,3,7}
 *         2、{2,3,4,5,18,17,6}
 */
public class ContainerWithMostWater {
    public int maxArea(int[] height) {
        int maxWater = 0;
        int j = height.length - 1;
        int i = 0;
        while (i < j){
            maxWater = Math.max(maxWater, (j - i) * Math.min(height[i], height[j]));
            if (height[i] > height[j]){
                j--;
            }else {
                i++;
            }
        }
        return maxWater;
    }
}
